#ifndef __MY_HOT__
#define __MY_HOT__
#include"date.hpp"
#include<unistd.h>

extern cloud::DataManager* _date;

namespace cloud
{
    class HotManager
    {
    private:
        std::string _back_dir;
        std::string _pack_dir;
        std::string _pack_suffix;
        int _hot_time;
    public:
        HotManager()
        {
            Config* Config=Config::GetInstance();
            _back_dir=Config->GetBackDir();
            _pack_dir=Config->GetPackDir();
            _pack_suffix=Config->GetPackFileSuffix();
            _hot_time=Config->GetHotTime();
            FileUtil tmp1(_back_dir);
            FileUtil tmp2(_pack_dir);
            tmp1.CreateDirectory();
            tmp2.CreateDirectory();
        }
        bool HotJudge(const std::string &filename)
        {
            //非热点文件-返回真 热点文件-返回假
            FileUtil fu(filename);
            time_t last_time=fu.LastATime();
            time_t cur_time=time(NULL);
            if(cur_time -last_time >_hot_time)
            {
                return true;
            }
            return false;
        }

        bool RunModule()
        {
            while(1)
            {
                //1、遍历本分目录,获取所有的文件名
                FileUtil fu(_back_dir);
                std::vector<std::string> arry;
                fu.ScanDirectory(&arry);
                //2、遍历判断文件是否是非热点文件
                for(auto &a: arry)
                {
                    if(HotJudge(a) ==false)
                    {
                        continue;//热点文件则不需要特别处理
                    }
                    //3.1、 获取文件的备份信息
                    BackupInfo bi;
                    if(_date->GetOneByRealPath(a,&bi) ==false)
                    {
                        //现在有一个文件存在，但是没有备份信息
                        bi.NewBackupInfo(a);//设置一个新的备份信息出来
                    }
                    //3.2、对非热点文件进行压缩处理
                    FileUtil tmp(a);
                    tmp.Compress(bi.pack_path);
                    //4、删除源文件，修改备份信息
                    tmp.Remove();
                    bi.pack_flag=true;
                    _date->Update(bi);
                }
                usleep(1000);//避免空目录循坏遍历，消耗cpu资源过高
            }
            return true;
        }
    };
}

#endif